#include "spi.h"

// peripheral configurations
#define SPI_MASTER  0x0120	// select 8-bit master mode, CKE=1, CKP=0
#define SPI_ENABLE	0x8000	// enable SPI port, clear status

void SPI2_Initial_g()
{
    IFS2bits.SPI2IF = 0;	// clear interrupt flag
	//IEC2bits.SPI2IE = 1;	// enable interrupt
    IEC2bits.SPI2IE = 0;	// disable interrupt
    
    SPI2CON1bits.DISSCK = 0; //禁止sck引脚，用作IO
    SPI2CON1bits.MODE16 = 0; //16字宽模式，0则为8位
    SPI2CON1bits.SMP = 0; //SPI数据输入采样阶段位，0输出末端，1输出中间，从模式时，SMP必须清零
    SPI2CON1bits.CKE = 0; //时钟边沿选择，0时钟由空闲转换为工作状态时变化，1时钟由工作状态转换为空闲状态时变化
    SPI2CON1bits.SSEN = 0; //从选择使能位，0模块不使用SSx引脚，引脚由IO端口功能控制，1SSx用于从模式
    SPI2CON1bits.CKP = 1; //时钟极性选择位，0空闲低电平，工作高电平，1空闲高电平，工作低电平
    SPI2CON1bits.MSTEN = 1; //主模式使能位
    SPI2CON1bits.SPRE = 0;  // 辅助预分频，000-8分频...110-2分频
    SPI2CON1bits.PPRE = 0 ;//主分频，00-64分频，01-16分频，10-4分频
    
    SPI2STAT = SPI_ENABLE;  // enable the peripheral
} // SPI2INTInit

// send one byte of data and receive one back at the same time
uint8_t SPI2_WriteReadByte_g( uint8_t i )
{
    SPI2BUF = i;					// write to buffer for TX
    while(!SPI2STATbits.SPIRBF);	// wait for transfer to complete
    return SPI2BUF;    				// read the received value
}//writeSPI2



void __attribute__((interrupt, no_auto_psv)) _SPI2Interrupt()
{
	/* add code here */
	
	IFS2bits.SPI2IF = 0;
	
}


